home *** CD-ROM | disk | FTP | other *** search
/ Imagination Express: Destination Rain Forest / Imagination Express - Destination Rain Forest.iso / pc / setup.ms_ / setup.bin
Text File  |  1995-02-27  |  20KB  |  583 lines

  1. '$DEFINE DEBUG
  2.  
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5. '$INCLUDE 'themenam.inc'
  6.  
  7. ''DIALOG ID's
  8. CONST WELCOME                    = 100
  9. CONST ASKQUIT                    = 200
  10. CONST DESTPATH                   = 300
  11. CONST EXITFAILURE                = 400
  12. CONST EXITQUIT                   = 600
  13. CONST EXITSUCCESS                = 700
  14. CONST APPHELP                    = 900
  15. CONST VERIFYWINPATH              = 2400
  16. CONST ERROR_UNEXPECTED           = 2200
  17. CONST EXITSUCCESSRESTART         = 2300
  18. CONST NOVIRTUALMEM               = 2600
  19. CONST ASKRESTART                 = 2700
  20. CONST RESTART                    = 2800
  21. CONST README                     = 2900
  22. CONST CUSTINST                   = 6200
  23.  
  24. ''OTHER CONSTANTS
  25. CONST LOGO                       = 1
  26. CONST EXIT_FAIL_NOT31            = 1500   '' NOT RUNNING AT LEAST WINDOWS 3.1
  27. CONST EXIT_FAIL_NOTINTEL         = 1600   '' NOT RUNNING ON INTEL
  28. CONST EXIT_FAIL_NOTENHANCED      = 1700   '' NOT RUNNING IN ENHANCED MODE
  29. CONST MB_YESNO                   = 4
  30. CONST MB_ICONINFORMATION         = 64
  31. CONST IDYES                      = 6
  32. CONST IDNO                       = 7
  33.  
  34. GLOBAL DESTWIN$         ''Windows directory
  35. GLOBAL DESTWINSYS$      ''Windows\System directory
  36. GLOBAL DESTDINER$       ''Diner directory
  37. GLOBAL bInstallDVA%
  38.  
  39. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  40. DECLARE SUB      UpdateWinG32 (szOrig$)
  41.  
  42. DECLARE FUNCTION OnWin3x            LIB "setuphlp.DLL" AS INTEGER
  43. DECLARE FUNCTION VflatdPresent      LIB "setuphlp.DLL" AS INTEGER
  44. DECLARE FUNCTION RestartWindows     LIB "setuphlp.DLL" AS INTEGER
  45. DECLARE FUNCTION IsWin32FileNewer   LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER
  46. DECLARE SUB      RenameFilePlease   LIB "setuphlp.DLL" (szOrig$,szNew$)
  47.  
  48. DECLARE FUNCTION OnWindowsNT     LIB "INIUPD.DLL" AS INTEGER
  49. DECLARE FUNCTION PagingEnabled   LIB "INIUPD.DLL" AS INTEGER
  50. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  51. DECLARE FUNCTION StartWaitCursor LIB "MSCUISTF.DLL" AS INTEGER
  52. DECLARE FUNCTION StopWaitCursor  LIB "MSCUISTF.DLL" AS INTEGER
  53.  
  54. INIT:
  55.    CUIDLL$ = "MSCUISTF.DLL"
  56.    bInstallDVA% = 0
  57.    ExitCode% = 0
  58.    ON ERROR GOTO ERRORTRAP
  59.  
  60.    SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  61.    DESTWIN$ = GetWindowsDir()
  62.    DESTDINER$ = "C:\IMAGINE\"
  63.  
  64.    SetBitmap CUIDLL$, LOGO
  65.    SetTitle "Imagination Express Setup"
  66.  
  67.    szInf$ = GetSymbolValue ("STF_SRCINFPATH")
  68.    IF szInf$ = "" THEN
  69.       szInf$ = GetSymbolValue ("STF_CWDDIR") + "setup.inf"
  70.    ENDIF
  71.    ReadInfFile szInf$
  72.  
  73. CHECK:
  74.    '' Check to make sure we're running at least Win 3.1
  75.    IF GetWindowsMajorVersion < 3 THEN
  76.       ExitCode% = EXIT_FAIL_NOT31
  77.       GOTO WELCOME
  78.    ENDIF
  79.  
  80.    IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 1 THEN
  81.       ExitCode% = EXIT_FAIL_NOT31
  82.       GOTO WELCOME
  83.    ENDIF
  84.  
  85.    '' Check to see that we're running in enhanced mode or on an INTEL-Based NT machine
  86.    '' GetWindowsMode < 2 means not INTEL if running NT, or not ENHANCED if running Windows
  87.    IF GetWindowsMode < 2 THEN
  88.       IF OnWindowsNT() THEN
  89.          ExitCode% = EXIT_FAIL_NOTINTEL
  90.       ELSE
  91.          ExitCode% = EXIT_FAIL_NOTENHANCED
  92.       ENDIF
  93.       GOTO WELCOME
  94.    ENDIF
  95.  
  96. VIRTUALMEM:
  97.    '' Check to make sure windows is set up for virtual memory
  98.    IF PagingEnabled() = 0 THEN
  99.       sz$ = UIStartDlg (CUIDLL$, NOVIRTUALMEM, "FInfoDlgProc", 0, "")
  100.       IF sz$ = "REACTIVATE" THEN
  101.          GOTO VIRTUALMEM
  102.       ENDIF
  103.       UIPop 1
  104.       GOTO WELCOME
  105.    ENDIF
  106.  
  107. WELCOME:
  108.  
  109.    sz$ = UIStartDlg (CUIDLL$, WELCOME, "FInfoDlgProc", 0, "")
  110.  
  111.    IF sz$ <> "CONTINUE" THEN
  112.       GOSUB ASKQUIT
  113.       GOTO WELCOME
  114.    ENDIF
  115.  
  116.    UIPop 1     '' destroy dialog on top of stack
  117.  
  118.    IF ExitCode% <> 0 THEN
  119.       GOTO EXITFAIL
  120.    ENDIF
  121.  
  122. VERIFYWINPATH:
  123.    '' Verify that setup has found the correct \windows directory
  124.    SetSymbolValue "EditTextIn", DESTWIN$
  125.    SetSymbolValue "EditFocus", "END"
  126.    sz$ = UIStartDlg (CUIDLL$, VERIFYWINPATH, "FEditDlgProc", 0, "")
  127.    IF sz$ = "REACTIVATE" THEN
  128.       GOTO VERIFYWINPATH
  129.    ELSEIF SZ$ = "EXIT" THEN
  130.       GOSUB ASKQUIT
  131.       GOTO VERIFYWINPATH
  132.    ENDIF
  133.    sz$ = GetSymbolValue ("EditTextOut")
  134.    IF sz$ <> DESTWIN$ THEN
  135.  
  136.       '' make sure user ended path with a '\'
  137.       '' if not, help 'em out
  138.       DESTWIN$ = sz$
  139.       DESTWIN$ = LTRIM$(RTRIM$ (DESTWIN$))
  140.       IF INSTR (LEN (DESTWIN$) - 1, DESTWIN$, "\") = 0 THEN
  141.          DESTWIN$ = DESTWIN$ + "\"
  142.       ENDIF
  143.       '' make sure path has a drive letter and drive letter is valid
  144.       sz$ = MID$ (DESTWIN$, 2, 1)
  145.       IF sz$ <> ":" THEN
  146.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  147.          GOTO VERIFYWINPATH
  148.       ENDIF
  149.       sz$ = MID$ (DESTWIN$, 1, 1)
  150.       IF IsDriveValid (sz$) = 0 THEN
  151.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  152.          GOTO VERIFYWINPATH
  153.       ENDIF
  154.       '' make sure path is valid (i.e. it exists)
  155.       IF DoesDirExist (DESTWIN$) = 0 THEN
  156.          i% = DoMsgBox (DESTWIN$ + " is not a valid path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  157.          GOTO VERIFYWINPATH
  158.       ENDIF
  159.  
  160.    ENDIF
  161.  
  162.    UIPop 1
  163.  
  164.    DESTWINSYS$ = DESTWIN$
  165.    IF INSTR (LEN (DESTWINSYS$) - 1, DESTWINSYS$, "\") = 0 THEN
  166.       DESTWINSYS$ = DESTWINSYS$ + "\"
  167.    ENDIF
  168.    DESTWINSYS$ = DESTWINSYS$ + "SYSTEM"
  169.  
  170. INITCOPYLISTFORESTIMATE:
  171.    '' add possible files to copy list so we can get the copy list cost for the next dialog
  172.    '' (so we know how much space the files will take up)
  173.    '' after the next dialog, we'll rebuild an actual copy list
  174.    '' (we can't do it accurately yet since we don't know where the diner path will be)
  175.    '' NOTE: THIS CANNOT BE A FINAL COPY LIST AS SOME VITAL COMMANDS DON'T APPEAR -
  176.    ''       SEE FINAL COPY LIST SECTION BELOW
  177.  
  178.    i% = StartWaitCursor()
  179.  
  180.    ClearCopyList
  181.  
  182.    AddSectionFilesToCopyList "Diner", SrcDir$, DESTDINER$
  183.    AddSectionFilesToCopyList "DinerWin DLLs", SrcDir$, DESTWINSYS$
  184.  
  185.    '' add themepack files to copy list
  186.    AddSectionFilesToCopyList THEMENAME$, SrcDir$, DESTDINER$ + "Themes\" + THEMEDIR$ + "\"
  187.  
  188.    '' see if DINER.INI file already exists
  189.    '' if not, copy a base INI file
  190.    IF DoesFileExist (DESTWIN$ + "Imagine.INI", femExists) = 0 THEN
  191.       AddSectionFilesToCopyList "INI", SrcDir$, DESTWIN$
  192.    ENDIF
  193.  
  194.    '' see if WAVEMIX.INI file already exists
  195.    '' if not, copy a pre-built one
  196.    IF DoesFileExist (DESTWIN$ + "WAVEMIX.INI", femExists) = 0 THEN
  197.       AddSectionFilesToCopyList "WaveMixIni", SrcDir$, DESTWIN$
  198.    ENDIF
  199.  
  200.    '' ********  WING SECTION STARTS HERE
  201.       AddSectionFilesToCopyList "WinG", SrcDir$, DESTWINSYS$
  202.  
  203.       '
  204.       ' only use DVA on Windows 3.x
  205.       '
  206.       IF OnWin3x() = 1 THEN
  207.          AddSectionFilesToCopyList "dva", SrcDir$, DESTWINSYS$
  208.       END IF
  209.  
  210.       AddSectionFilesToCopyList "wing32", SrcDir$, DESTWINSYS$
  211.  
  212.    '' Add VfW files here
  213.    AddSectionFilesToCopyList "VfW Runtime", SrcDir$, DESTWINSYS$
  214.    AddSectionFilesToCopyList "AVICodecs", SrcDir$, DESTWINSYS$
  215.    AddSectionFilesToCopyList "ACM Drivers", SrcDir$, DESTWINSYS$
  216.    AddSectionFilesToCopyList "Indeo-ini", SrcDir$, DESTWIN$
  217.    AddSectionFilesToCopyList "OLE2", SrcDir$, DESTWINSYS$
  218.    AddSectionFilesToCopyList "MPlayer", SrcDir$, DESTWIN$
  219.    sizereq& = GetCopyListCost ("", "NeededSpace", "ExtraNeeded")
  220.  
  221.    i% = StopWaitCursor()
  222.  
  223. CUSTOMINIT:
  224.    '' SET UP DRIVE AND DIRECTORY SYMBOL VALUES HERE
  225.    SetSymbolValue "DriveStatusText", ""
  226.    sz$ = MID$ (DESTDINER$, 1, 2)
  227.    AddListItem "DriveStatusText", sz$
  228.    sz$ = GetListItem ("NeededSpace", ASC(LCASE$ (DESTDINER$)) - ASC("a") + 1)
  229.    AddListItem "DriveStatusText", sz$
  230.    DinerSpaceAvail& = GetFreeSpaceForDrive (MID$ (DESTDINER$, 1, 1))
  231.    AddListItem "DriveStatusText", STR$ (DinerSpaceAvail&)
  232.    AddListItem "DriveStatusText", ""
  233.    AddListItem "DriveStatusText", ""
  234.    AddListItem "DriveStatusText", ""
  235.    AddListItem "DriveStatusText", DESTDINER$
  236.  
  237. CUSTOM:
  238.    '' Get drive and directory to install Diner to
  239.    sz$ = UIStartDlg (CUIDLL$, CUSTINST, "FCustInstDlgProc", 0, "")
  240.    IF sz$ = "REACTIVATE" THEN
  241.       GOTO CUSTOM
  242.    ELSEIF sz$ = "BACK" THEN
  243.       UIPop 1
  244.       GOTO VERIFYWINPATH
  245.    ELSEIF sz$ = "EXIT" THEN
  246.       GOSUB ASKQUIT
  247.       GOTO CUSTOM
  248.    ELSEIF sz$ = "PATH" THEN
  249.       TEMPDINER$ = DESTDINER$
  250. GETDINERPATH:
  251.       '' Let user choose own path for Diner
  252.       SetSymbolValue "EditTextIn", TEMPDINER$
  253.       SetSymbolValue "EditFocus", "ALL"
  254.       sz$ = UIStartDlg (CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  255.       IF sz$ = "REACTIVATE" THEN
  256.          GOTO GETDINERPATH
  257.       ELSEIF sz$ = "BACK" THEN
  258.          UIPop 1
  259.          GOTO CUSTOM
  260.       ELSEIF sz$ = "EXIT" THEN
  261.          GOSUB ASKQUIT
  262.          GOTO GETDINERPATH
  263.       ENDIF
  264.       sz$ = GetSymbolValue ("EditTextOut")
  265.       '' make sure user ended path with a '\'
  266.       '' if not, help 'em out
  267.       TEMPDINER$ = LTRIM$ (RTRIM$ (sz$))
  268.       IF INSTR (LEN (TEMPDINER$) - 1, TEMPDINER$, "\") = 0 THEN
  269.          TEMPDINER$ = TEMPDINER$ + "\"
  270.       ENDIF
  271.       '' make sure path has a drive letter and drive letter is valid
  272.       sz$ = MID$ (TEMPDINER$, 2, 1)
  273.       IF sz$ <> ":" THEN
  274.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  275.          GOTO GETDINERPATH
  276.       ENDIF
  277.       sz$ = MID$ (TEMPDINER$, 1, 1)
  278.       IF IsDriveValid (sz$) = 0 THEN
  279.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  280.          GOTO GETDINERPATH
  281.       ENDIF
  282.       '' make sure path is valid
  283.       IF IsDirWritable (TEMPDINER$) = 0 THEN
  284.          i% = DoMsgBox (TEMPDINER$ + " is not a valid path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  285.          GOTO GETDINERPATH
  286.       ENDIF
  287.       UIPop 1
  288.       DESTDINER$ = TEMPDINER$
  289.       GOTO INITCOPYLISTFORESTIMATE
  290.    ENDIF
  291.  
  292.    UIPop 1
  293.  
  294. CHECKSPACE:
  295. '   IF sizereq& <> 0 THEN
  296. '      i% = DoMsgBox ("Not enough free space on drive.  Please delete some files to free up space or choose a different destination drive.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  297. '      GOTO CUSTOM
  298. '   ENDIF
  299.    amt$ = GetListItem ("ExtraNeeded", ASC(LCASE$ (DESTDINER$)) - ASC("a") + 1)
  300.    amt$ = MID$ (amt$, 1, 1)
  301.    IF amt$ <> "-" THEN
  302.       i% = DoMsgBox ("Not enough free space on destination drive.  Please delete some files to free up space or choose a different destination drive.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  303.       GOTO CUSTOM
  304.    ENDIF
  305.  
  306.    amt$ = GetListItem ("ExtraNeeded", ASC(LCASE$ (DESTWIN$)) - ASC("a") + 1)
  307.    amt$ = MID$ (amt$, 1, 1)
  308.    IF amt$ <> "-" THEN
  309.       i% = DoMsgBox ("Not enough free space on windows drive.  Please delete some files to free up space and run Setup again.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  310.       GOTO SEEYA
  311.    ENDIF
  312.  
  313.  
  314. INITREALCOPYLIST:
  315.    '' add files to copy list
  316.    ClearCopyList
  317.    AddSectionFilesToCopyList "Diner", SrcDir$, DESTDINER$
  318.    AddSectionFilesToCopyList "DinerWin DLLs", SrcDir$, DESTWINSYS$
  319.  
  320.    '' add themepack files to copy list
  321.    AddSectionFilesToCopyList THEMENAME$, SrcDir$, DESTDINER$ + "Themes\" + THEMEDIR$ + "\"
  322.  
  323.    '' see if DINER.INI file already exists
  324.    '' if not, copy a base INI file
  325.    IF DoesFileExist (DESTWIN$ + "Imagine.INI", femExists) = 0 THEN
  326.       AddSectionFilesToCopyList "INI", SrcDir$, DESTWIN$
  327.    ENDIF
  328.  
  329.    '' see if WAVEMIX.INI file already exists
  330.    '' if not, copy a pre-built one
  331.    IF DoesFileExist (DESTWIN$ + "WAVEMIX.INI", femExists) = 0 THEN
  332.       AddSectionFilesToCopyList "WaveMixIni", SrcDir$, DESTWIN$
  333.    ENDIF
  334.  
  335.    '' ********  WING SECTION STARTS HERE
  336.       AddSectionFilesToCopyList "WinG", SrcDir$, DESTWINSYS$
  337.  
  338.       '
  339.       ' only use DVA on Windows 3.x
  340.       '
  341.       IF OnWin3x() = 1 THEN
  342.          AddSectionFilesToCopyList "dva", SrcDir$, DESTWINSYS$
  343.          IF VflatdPresent() = 0 THEN
  344.             bInstallDVA% = 1
  345.          END IF
  346.       END IF
  347.  
  348.       AddSectionFilesToCopyList "wing32", SrcDir$, DESTWINSYS$
  349.          Dest1$ = MakePath(DESTWINSYS$,"wing32.dll")
  350.          Dest2$ = MakePath(DESTWINSYS$,"wing32.xxx")
  351.       RenameFilePlease Dest1$,Dest2$
  352.  
  353.    '' Add VfW files here
  354.    AddSectionFilesToCopyList "VfW Runtime", SrcDir$, DESTWINSYS$
  355.    AddSectionFilesToCopyList "AVICodecs", SrcDir$, DESTWINSYS$
  356.    AddSectionFilesToCopyList "ACM Drivers", SrcDir$, DESTWINSYS$
  357.    AddSectionFilesToCopyList "Indeo-ini", SrcDir$, DESTWIN$
  358.    AddSectionFilesToCopyList "OLE2", SrcDir$, DESTWINSYS$
  359.    AddSectionFilesToCopyList "MPlayer", SrcDir$, DESTWIN$
  360.  
  361. COPYFILES:
  362.    RESTARTDIR$ = DESTWIN$
  363.    SetRestartDir RESTARTDIR$
  364.    SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  365.    CreateDir DESTDINER$, cmoVital
  366.    CreateDir DESTDINER$ + "Kids\", cmoVital
  367.    CreateDir DESTDINER$ + "Sounds\", cmoVital
  368.    CreateDir DESTDINER$ + "Themes\", cmoVital
  369.    CreateDir DESTDINER$ + "Themes\" + THEMEDIR$ + "\", cmoVital
  370.    ERR = 0
  371.  
  372.    '' copy the files
  373.    CopyFilesInCopyList
  374.  
  375.    '' update wing32
  376.    UpdateWinG32 DESTWINSYS$
  377.  
  378.    '' if we needed to install DVA, create an INI key value
  379.    IF bInstallDVA% = 1 THEN
  380.       CreateSysIniKeyValue DESTWIN$ + "system.ini", "386Enh", "device", MakePath(DESTWINSYS$, "dva.386"), cmoOverwrite
  381.    ENDIF
  382.  
  383.    '' update VfW stuff
  384.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite
  385.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
  386.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.IV31", "ir32.dll", cmoOverwrite
  387.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.IV32", "ir32.dll", cmoOverwrite
  388.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.MRLE", "MSRLE.drv", cmoOverwrite
  389.    I% = DoesIniKeyExist (DESTWIN$ + "system.ini", "Drivers", "VIDC.RT21")
  390.    IF I% = 0  THEN
  391.       CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.RT21", "indeov.drv", cmoOverwrite
  392.    END IF
  393.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.YVU9", "indeov.drv", cmoOverwrite
  394.    CreateIniKeyValue DESTWIN$ + "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite
  395.    CreateIniKeyValue DESTWIN$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite
  396.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "WaveMapper", "msacm.drv", cmoOverwrite
  397.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite
  398.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "MSACM.imaadpcm", "imaadpcm.acm", cmoOverwrite
  399.    CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "msacm.drv", "Microsoft Sound Mapper V2.00", cmoOverwrite
  400.    CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "msadpcm.acm", "Microsoft ADPCM Codec V2.00", cmoOverwrite
  401.    CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "imaadpcm.acm", "Microsoft IMA ADPCM Codec V2.00", cmoOverwrite
  402.  
  403.    '' add a key and item for new themepack in ini file
  404.      CreateIniKeyValue DESTWIN$ + "Imagine.INI", "Themepack List", THEMENAME$, "Themes\" + THEMEDIR$ + "\", cmoOverwrite
  405.  
  406.    '' create an ini value for diner root dir
  407.    CreateIniKeyValue DESTWIN$ + "Imagine.INI", "General", "Root", DESTDINER$, cmoOverwrite
  408.  
  409.    '' check for copy errors
  410.    IF ERR <> 0 THEN
  411.       GOTO ERR_UNEXPECTED
  412.    ENDIF
  413.  
  414.    '' more VfW stuff
  415.    Run ("regedit.exe /s " + MakePath(DESTWIN$, "mplayer.reg"))
  416.    Run ("regedit.exe /s " + MakePath(DESTWINSYS$, "OLE2.reg"))
  417.    Run ("regedit.exe /s " + MakePath(DESTWINSYS$, "cleanup.reg"))
  418.    CreateProgmanItem "Accessories", "Media Player", MakePath(DESTWIN$, "mplayer.exe"), "", cmoOverwrite
  419.  
  420.    '' add program manager group and item icon
  421.    CreateProgmanGroup "Edmark", "", cmoNone
  422.    CreateProgmanItem "Edmark", "Imagination Express", DESTDINER$ + "IMAGINE.EXE", "", cmoOverwrite
  423.    CreateProgmanItem "Edmark", "Imagination Express Readme", "WRITE.EXE " + MakePath (DESTDINER$, "README.WRI"), "", cmoOverwrite
  424.    ShowProgmanGroup "Edmark", 1, cmoNone
  425.  
  426.    Run ("profdisp.exe")
  427.  
  428. READMEDLG:
  429.    sz$ = UIStartDlg (CUIDLL$, README, "FInfoDlgProc", 0, "")
  430.    IF sz$ = "REACTIVATE" THEN
  431.       GOTO READMEDLG
  432.    ENDIF
  433.    UIPop 1
  434.  
  435. SUCCESS:
  436. '' HERE WE SHOULD REALLY SEE IF WE NEED TO RESTART WINDOWS (MAYBE BECAUSE OF VfW)
  437. '' IF SO, THEN WE WANT TO CHECK FOR LOCKED FILES BEFORE DISPLAYING THE DIALOG AND
  438. '' THEN DISPLAY THE APPROPRIATE DIALOG
  439.  
  440.    '' indicate success to the user and restart windows if necessary
  441.    sz$ = UIStartDlg (CUIDLL$, EXITSUCCESS, "FInfoDlgProc", 0, "")
  442.    IF sz$ = "REACTIVATE" THEN
  443.       GOTO SUCCESS
  444.    ENDIF
  445.    UIPop 1
  446.  
  447.    RESTRT% = RestartListEmpty ()
  448. RESTART:
  449.    IF RESTRT% = 0 THEN
  450.       sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfo0DlgProc", 0, "")
  451.       IF sz$ = "REACTIVATE" THEN
  452.          GOTO RESTART
  453.       ENDIF
  454. DOIT:
  455.       I% = ExitExecRestart ()
  456.       dummy% = DoMsgBox ("Windows cannot be restarted because MS-DOS applications are active.  Close all MS-DOS applications and then click OK.", "Imagination Express", MB_OK + MB_ICONHAND)
  457.       goto DOIT
  458.       END
  459.    ELSEIF bInstallDVA% = 1 THEN
  460.       sz$ = UIStartDlg(CUIDLL$, ASKRESTART, "FInfoDlgProc", 0, "")
  461.       IF sz$ = "CONTINUE" THEN
  462.          I% = RestartWindows
  463.       ELSEIF sz$ = "EXIT" THEN
  464.          UIPopAll
  465.          END
  466.       ELSEIF sz$ = "REACTIVATE" THEN
  467.          GOTO RESTART
  468.       ELSE
  469.          UIPop 1
  470.       END IF
  471.    END IF
  472.    GOTO SEEYA
  473.  
  474. ASKQUIT:
  475.    sz$ = UIStartDlg (CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  476.  
  477.    IF sz$ = "EXIT" THEN
  478.       UIPop 1
  479.       GOTO QUIT
  480.    ELSEIF sz$ = "REACTIVATE" THEN
  481.       GOTO ASKQUIT
  482.    ELSE
  483.       UIPop 1                 '' remove quit dialog and go back to previous dialog
  484.    ENDIF
  485.  
  486.    RETURN
  487.  
  488. QUIT:
  489.    sz$=  UIStartDlg (CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  490.    IF sz$ = "REACTIVATE" THEN
  491.       GOTO QUIT
  492.    ENDIF
  493.    UIPopALL
  494.    GOTO SEEYA
  495.  
  496. ERR_UNEXPECTED:
  497.    sz$ = UIStartDlg (CUIDLL$, ERROR_UNEXPECTED, "FInfoDlgProc", 0, "")
  498.    IF sz$ = "REACTIVATE" THEN
  499.       GOTO ERR_UNEXPECTED
  500.    ENDIF
  501.    UIPop 1
  502.    GOTO FAILURE
  503.  
  504. EXITFAIL:
  505.    sz$ = UIStartDlg (CUIDLL$, ExitCode%, "FInfoDlgProc", 0, "")
  506.    IF sz$ = "REACTIVATE" THEN
  507.       GOTO EXITFAIL
  508.    ENDIF
  509.    UIPop 1
  510.    GOTO FAILURE
  511.  
  512. FAILURE:
  513.    sz$ = UIStartDlg (CUIDLL$, EXITFAILURE, "FInfoDlgProc", 0, "")
  514.    IF sz$ = "REACTIVATE" THEN
  515.       GOTO FAILURE
  516.    ENDIF
  517.    UIPopAll
  518.    GOTO SEEYA
  519.  
  520.  
  521. ERRORTRAP:
  522.    IF ERR = STFQUIT THEN
  523.       GOTO QUIT
  524.    ENDIF
  525.  
  526.    RESUME NEXT
  527.  
  528.  
  529. SEEYA:
  530.    UIPopAll
  531.    END
  532.  
  533.  
  534.  
  535. '' FROM HERE ON ARE FUNCTIONS IN THE ORIGINAL WING.MST FILE THAT THE WING SETUP USES
  536.  
  537. '**
  538. '** Purpose:
  539. '**     Appends a file name to the end of a directory path,
  540. '**     inserting a backslash character as needed.
  541. '** Arguments:
  542. '**     szDir$  - full directory path (with optional ending "\")
  543. '**     szFile$ - filename to append to directory
  544. '** Returns:
  545. '**     Resulting fully qualified path name.
  546. '*************************************************************************
  547. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  548.     IF szDir$ = "" THEN
  549.    MakePath = szFile$
  550.     ELSEIF szFile$ = "" THEN
  551.    MakePath = szDir$
  552.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  553.    MakePath = szDir$ + szFile$
  554.     ELSE
  555.    MakePath = szDir$ + "\" + szFile$
  556.     END IF
  557. END FUNCTION
  558.  
  559.  
  560.  
  561. SUB UpdateWinG32 (szOrig$) STATIC
  562.     '
  563.     ' Here we check the version ourselves of wing32.dll, since
  564.     ' we can't get version checking for Win32 apps from Win16
  565.     '
  566.     FileNew$ = MakePath(szOrig$, "wing32.dll")
  567.     FileOrig$ = MakePath(szOrig$, "wing32.xxx")
  568.     IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN
  569.       RemoveFile FileOrig$, cmoForce
  570.     ELSE
  571.       RemoveFile FileNew$, cmoForce    ' get rid of new file
  572.       RenameFilePlease FileOrig$,FileNew$ ' put back old file
  573.     END IF
  574. END SUB
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.